
export const createRoute = (record,location)=>{//根据匹配到的记录来计算匹配到的所有的记录
    let matched = [];
    if(record){
        while(record){
            matched.unshift(record);
            record = record.parent; //通过当前记录找到所有的父亲
        }
        
    }
    return {
        ...location,
        matched:[]
    }
}
//这个current就是一个普通的变量  this.current ? 希望current变化了可以更新视图
export default class History{
    constructor(router){
        this.router = router;
        //这个代表的是当前路径匹配出来的记录
        this.current = createRoute(null,{path:'/'});
        //this.current = {path:'/',matched:[]}
    }

    transitionTo(location,complete){
        //获取当前路径匹配出对应的记录。当路径变化时获取对应的记录 =>渲染页面(router-view来渲染的)
        //location 用来匹配路径

        //通过路劲拿到对应的记录  有了记录之后就可以找到对应的匹配
        let current = this.router.match(location);//当路径变化后 current属性会进行更新操作
        //防止重复点击 不需要再次渲染
        //匹配到的个数和路径都是相同的  就不需要再次跳转了
        if(this.current.path == location && this.current.matched.length === current.matched.length){
            return;
        }
        //用最新的匹配到的结果去更新视图
        this.current = current; //这个current只是响应式的  他的变化不会更新_route
        this.cb && this.cb(current);

        complete && complete();
    }

    listen(cb){
        this.cb = cb;
    }
}